package process

import (
	"chatroom/client/utils"
	"chatroom/common/message"
	"encoding/json"
	"fmt"
)

type SmsProcess struct {
}

//写一个方法，用来选择群聊或者私聊
func (smsProcess *SmsProcess) Choicechat() {
	var content string
	var choice int
	fmt.Println("选择私聊或者群聊：")
	fmt.Println("\t1.群聊")
	fmt.Println("\t2.私聊")
	fmt.Scanf("%d\n", &choice)
	switch choice {
	case 1:
		fmt.Println("你想对大家说点什么：")
		fmt.Scanf("%s\n", &content)
		smsProcess.SendGroupMes(content)
	case 2:
		//fmt.Println("私聊对象Id：")
		outputOnlineUser()
		fmt.Println("私聊对象Id：")
		var id int
		fmt.Scanf("%d\n", &id)

		fmt.Println("你想对他说点什么：")
		fmt.Scanf("%s\n", &content)

		smsProcess.SendPrivateMes(content, id)
	default:
		fmt.Println("输入错误")
	}
}

//发送群聊消息
func (smsProcess *SmsProcess) SendGroupMes(content string) (err error) {

	//1.创建一个 message
	var mes message.Message
	mes.Type = message.SmsMesType

	//2.创建一个 smsmes 实例
	var smsMes message.SmsMes
	smsMes.Content = content //内容
	smsMes.UserId = CurUser.UserId
	smsMes.UserStatus = CurUser.UserStatus

	//3.序列化 smsmes
	data, err := json.Marshal(smsMes)
	if err != nil {
		fmt.Println("SendGroupMes json.Marshal(smsMes) err=", err.Error())
		return
	}
	mes.Data = string(data)

	//4.对mes 再次序列化
	data, err = json.Marshal(mes)
	if err != nil {
		fmt.Println("SendGroupMes json.Marshal(mes) err=", err.Error())
		return
	}

	//5.将mes 发送给服务器
	tf := &utils.TransFer{
		Conn: CurUser.Conn,
	}

	//6.发送
	err = tf.WritePkg(data)
	if err != nil {
		fmt.Println("SendGroupMes tf.WritePkg(data) err=", err.Error())
		return
	}
	fmt.Println()

	return
}

//发送私聊信息
func (smsProcess *SmsProcess) SendPrivateMes(content string, userId int) (err error) {

	//1.创建一个message.Message 实例，用来传输给服务器端
	var mes message.Message
	mes.Type = message.PrivateMesType
	//2.创建一个 PrivateMes 实例，作为 mes.Data 数据传输
	var privateMes message.PrivateMes
	privateMes.ReceiveId = userId //接收方的 id 信息
	privateMes.Content = content
	privateMes.UserId = CurUser.UserId
	privateMes.UserStatus = CurUser.UserStatus

	//3.序列化 privateMes
	data, err := json.Marshal(privateMes)
	if err != nil {
		fmt.Println("SendPrivateMes  json.Marshal(privateMes) err=", err)
		return
	}
	mes.Data = string(data)

	//4.序列化 mes
	data, err = json.Marshal(mes)
	if err != nil {
		fmt.Println("SendPrivateMes  json.Marshal(mes) err=", err)
		return
	}

	//5.发送给服务器
	//创建一个 TransFer实例，用来与服务器连接
	tf := &utils.TransFer{
		Conn: CurUser.Conn,
	}

	//6.发送
	err = tf.WritePkg(data)
	if err != nil {
		fmt.Println("SendPrivateMes  tf.WritePkg(data) err=", err)
		return
	}
	fmt.Println()
	return
}
